package com.example.smartagrisys.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.smartagrisys.common.Result;
import com.example.smartagrisys.entity.SellerProduct;
import com.example.smartagrisys.entity.User;
import com.example.smartagrisys.service.SellerProductService;
import com.example.smartagrisys.service.UserService;
import com.example.smartagrisys.util.SecurityUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 卖家商品控制器
 */
@Slf4j
@RestController
@RequestMapping("/seller/product")
public class SellerProductController {

    @Autowired
    private SellerProductService sellerProductService;
    
    @Autowired
    private UserService userService;

    /**
     * 分页获取卖家商品列表
     *
     * @param current 当前页
     * @param size 每页条数
     * @param category 商品分类
     * @param status 商品状态
     * @param keyword 搜索关键词
     * @return 分页结果
     */
    @GetMapping("/page")
    public Result<IPage<SellerProduct>> getSellerProductPage(
            @RequestParam(defaultValue = "1") Integer current,
            @RequestParam(defaultValue = "10") Integer size,
            @RequestParam(required = false) String category,
            @RequestParam(required = false) Integer status,
            @RequestParam(required = false) String keyword) {
        
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        Page<SellerProduct> page = new Page<>(current, size);
        IPage<SellerProduct> result = sellerProductService.getSellerProductPage(page, sellerId, category, status, keyword);
        
        return Result.success(result);
    }

    /**
     * 获取卖家自己的商品列表
     *
     * @return 商品列表
     */
    @GetMapping("/my")
    public Result<List<SellerProduct>> getMyProducts() {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        List<SellerProduct> products = sellerProductService.getSellerProducts(sellerId);
        
        // 初始化每个商品的数组字段
        for (SellerProduct product : products) {
            product.initArrayFields();
        }
        
        return Result.success(products);
    }

    /**
     * 获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情
     */
    @GetMapping("/{id}")
    public Result<SellerProduct> getProductById(@PathVariable Long id) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        SellerProduct product = sellerProductService.getSellerProductById(id);
        
        if (product == null) {
            return Result.error("商品不存在");
        }
        
        // 验证是否是自己的商品
        if (!product.getSellerId().equals(sellerId)) {
            return Result.error("无权访问此商品");
        }
        
        // 初始化数组字段
        product.initArrayFields();
        
        return Result.success(product);
    }

    /**
     * 添加商品
     *
     * @param product 商品信息
     * @return 添加结果
     */
    @PostMapping
    public Result<Boolean> addProduct(@RequestBody SellerProduct product) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        log.info("接收到添加商品请求: {}", product);
        
        // 设置卖家信息
        User user = userService.getById(sellerId);
        product.setSellerId(sellerId);
        product.setSellerName(user.getUsername());
        
        // 处理证书和适用作物数据
        if (product.getCertificatesList() != null) {
            // setCertificatesList方法会自动更新certificates字段
            product.setCertificatesList(product.getCertificatesList());
        }
        
        if (product.getSuitableCropsList() != null) {
            // setSuitableCropsList方法会自动更新suitableCrops字段
            product.setSuitableCropsList(product.getSuitableCropsList());
        }
        
        boolean result = sellerProductService.addSellerProduct(product);
        if (!result) {
            return Result.error("添加商品失败");
        }
        
        return Result.success(true);
    }

    /**
     * 更新商品
     *
     * @param product 商品信息
     * @return 更新结果
     */
    @PutMapping
    public Result<Boolean> updateProduct(@RequestBody SellerProduct product) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        log.info("接收到更新商品请求: {}", product);
        
        // 验证是否是自己的商品
        SellerProduct existingProduct = sellerProductService.getById(product.getId());
        if (existingProduct == null) {
            return Result.error("商品不存在");
        }
        
        if (!existingProduct.getSellerId().equals(sellerId)) {
            return Result.error("无权操作此商品");
        }
        
        // 处理证书和适用作物数据
        if (product.getCertificatesList() != null) {
            // setCertificatesList方法会自动更新certificates字段
            product.setCertificatesList(product.getCertificatesList());
        }
        
        if (product.getSuitableCropsList() != null) {
            // setSuitableCropsList方法会自动更新suitableCrops字段
            product.setSuitableCropsList(product.getSuitableCropsList());
        }
        
        boolean result = sellerProductService.updateSellerProduct(product);
        if (!result) {
            return Result.error("更新商品失败");
        }
        
        return Result.success(true);
    }

    /**
     * 删除商品
     *
     * @param id 商品ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteProduct(@PathVariable Long id) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        // 验证是否是自己的商品
        SellerProduct existingProduct = sellerProductService.getById(id);
        if (existingProduct == null) {
            return Result.error("商品不存在");
        }
        
        if (!existingProduct.getSellerId().equals(sellerId)) {
            return Result.error("无权操作此商品");
        }
        
        boolean result = sellerProductService.deleteSellerProduct(id);
        if (!result) {
            return Result.error("删除商品失败");
        }
        
        return Result.success(true);
    }

    /**
     * 批量删除商品
     *
     * @param ids 商品ID列表
     * @return 删除结果
     */
    @PostMapping("/batch-delete")
    public Result<Boolean> batchDeleteProducts(@RequestBody List<Long> ids) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        if (ids == null || ids.isEmpty()) {
            return Result.error("请选择要删除的商品");
        }
        
        // 验证是否都是自己的商品
        List<SellerProduct> products = sellerProductService.listByIds(ids);
        if (products.size() != ids.size()) {
            return Result.error("部分商品不存在");
        }
        
        for (SellerProduct product : products) {
            if (!product.getSellerId().equals(sellerId)) {
                return Result.error("无权操作部分商品");
            }
        }
        
        boolean result = sellerProductService.batchDeleteSellerProducts(ids);
        if (!result) {
            return Result.error("批量删除商品失败");
        }
        
        return Result.success(true);
    }

    /**
     * 更新商品状态
     *
     * @param id 商品ID
     * @param status 商品状态
     * @return 更新结果
     */
    @PutMapping("/{id}/status/{status}")
    public Result<Boolean> updateProductStatus(@PathVariable Long id, @PathVariable Integer status) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        // 验证是否是自己的商品
        SellerProduct existingProduct = sellerProductService.getById(id);
        if (existingProduct == null) {
            return Result.error("商品不存在");
        }
        
        if (!existingProduct.getSellerId().equals(sellerId)) {
            return Result.error("无权操作此商品");
        }
        
        boolean result = sellerProductService.updateSellerProductStatus(id, status);
        if (!result) {
            return Result.error("更新商品状态失败");
        }
        
        return Result.success(true);
    }

    /**
     * 批量更新商品状态
     *
     * @param request 请求参数，包含productIds和status
     * @return 更新结果
     */
    @PostMapping("/batch-status")
    public Result<Boolean> batchUpdateProductsStatus(@RequestBody Map<String, Object> request) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        @SuppressWarnings("unchecked")
        List<Long> productIds = (List<Long>) request.get("productIds");
        Integer status = (Integer) request.get("status");
        
        if (productIds == null || productIds.isEmpty()) {
            return Result.error("请选择要操作的商品");
        }
        
        if (status == null) {
            return Result.error("请指定商品状态");
        }
        
        // 验证是否都是自己的商品
        List<SellerProduct> products = sellerProductService.listByIds(productIds);
        if (products.size() != productIds.size()) {
            return Result.error("部分商品不存在");
        }
        
        for (SellerProduct product : products) {
            if (!product.getSellerId().equals(sellerId)) {
                return Result.error("无权操作部分商品");
            }
        }
        
        boolean result = sellerProductService.batchUpdateSellerProductsStatus(productIds, status);
        if (!result) {
            return Result.error("批量更新商品状态失败");
        }
        
        return Result.success(true);
    }

    /**
     * 上传商品图片
     *
     * @param file 图片文件
     * @return 图片URL
     */
    @PostMapping("/upload/image")
    public Result<String> uploadProductImage(@RequestParam("file") MultipartFile file) {
        // 获取当前登录卖家ID
        Long sellerId = SecurityUtil.getCurrentUserId();
        if (sellerId == null) {
            return Result.error("用户未登录");
        }
        
        if (file.isEmpty()) {
            return Result.error("上传文件不能为空");
        }
        
        String imageUrl = sellerProductService.uploadSellerProductImage(file);
        if (imageUrl == null) {
            return Result.error("上传图片失败");
        }
        
        return Result.success(imageUrl);
    }
}
